<?php
/*
 * redis 操作类
 **/
namespace Think;

class Redisctr{
    
    private static $obj;
    
    private static $handel = false;
    
    private $timeout = 300;
    
    private static $enable = true;
    
    public static function create($str = "default"){
        if(self::$enable == false){
            //...
        }
        if(!self::$obj instanceof Redisctr){
            $re = new self($str);
            self::$obj = &$re;
        }
        return self::$obj;
    }
    
    private function __construct() {
        if(self::$handel==false){
            $r = new \Redis;
            $r->connect(C('REDIS_HOST'),C('REDIS_PORT'),$this->timeout);
            self::$handel = &$r;
        }
    }
    
    
  
    /** 
     * 设置值 
     * @param string $key KEY名称 
     * @param string|array $value 获取得到的数据 
     * @param int $timeOut 时间 
     */  
    public function set($key, $value, $timeOut = 0) {  
        $value = json_encode($value, TRUE); 
        $retRes = self::$handel->set($key, $value); 
        return $retRes;  
    }  
  
    /** 
     * 通过KEY获取数据 
     * @param string $key KEY名称 
     */  
    public function get($key) {  
        $result = self::$handel->get($key);  
        return json_decode($result, TRUE);  
    }  
      
    /** 
     * 删除一条数据 
     * @param string $key KEY名称 
     */  
    public function delete($key) {  
        return self::$handel->delete($key);  
    }  
      
    /** 
     * 清空数据 
     */  
    public function flushAll() {  
        return self::$handel->flushAll();  
    }  
      
    /** 
     * 数据入队列 
     * @param string $key KEY名称 
     * @param string|array $value 获取得到的数据 
     * @param bool $right 是否从右边开始入 
     */  
    public function push($key, $value ,$right = true) {  
        $value = json_encode($value);  
        return $right ? self::$handel->rPush($key, $value) : self::$handel->lPush($key, $value);  
    }  
      
    /** 
     * 数据出队列 
     * @param string $key KEY名称 
     * @param bool $left 是否从左边开始出数据 
     */  
    public function pop($key , $left = true) {  
        $val = $left ? self::$handel->lPop($key) : self::$handel->rPop($key);  
        return json_decode($val);  
    }  
      
    /** 
     * 数据自增 
     * @param string $key KEY名称 
     */  
    public function increment($key) {  
        return self::$handel->incr($key);  
    }  
  
    /** 
     * 数据自减 
     * @param string $key KEY名称 
     */  
    public function decrement($key) {  
        return self::$handel->decr($key);  
    }  
      
    /** 
     * key是否存在，存在返回ture 
     * @param string $key KEY名称 
     */  
    public function exists($key) {  
        return self::$handel->exists($key);  
    }  
      
    /** 
     * 返回redis对象 
     * redis有非常多的操作方法，我们只封装了一部分 
     * 拿着这个对象就可以直接调用redis自身方法 
     */  
    public function redis() {  
        return self::$handel;  
    }  
}